#define _GNU_SOURCE
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

//#define LOG(fmt, ...) printf(fmt, __VA_ARGS__)
#define LOG(fmt, ...) printf(fmt, ##__VA_ARGS__)


void printNum(int n, ...)
{
    va_list va;
    va_start(va, n);  // 让va指向n参数后第一个可变参数
    for (int i = 0; i < n; i++)
    {
        int num = va_arg(va, int);  // 可变参数中取出一个整形
        printf("%d ", num);
    }
    va_end(va);  // 清空可变参数列表，va置空
}

void myprintf(const char* fmt, ...)
{
    va_list va;
    va_start(va, fmt);
    char *res;
    int ret = vasprintf(&res, fmt, va);
    if (ret != -1)
    {
        printf(res);
        free(res);
    }

    va_end(va);
}

int main()
{
    // LOG("%s%d%s\n", "吃了", 5, "个西瓜");
    // // 不带省略号的参数
    // LOG("吃了5个西瓜\n");  // 修改宏，连接##，如果是空，前面的，号取消

    //printNum(3, 11, 22, 33);
    myprintf("%s%d%s", "我吃了", 5, "个西瓜");
    return 0;
}